開門見山的先來說說為什麼要使用Istio?要說這故事的起點 來!讓我們回到過去~可以追朔到2018的七月一個Long Time Ago~~因為公司關係需要建立一個專且使用K8S架構,一開始的初衷大概是跟上大時代的洪流,要去將系統微服務化,如此一來需要使用到的就是Ingress->service->pod大致上這樣的基礎架構運行在K8S上,但由於我們有使用一款TCP長連線服務gRPC。
這邊稍微解釋一下gRPC長連線是一個什麼東西為什麼使用,顧名思義長連線就是一個連線後持久化的狀態,在gRPC做法就是當服務第一次做Reqset時建立第一條連線後日後會複用該連線,好處當然就是減緩效能的消耗,簡單來說就是像Websocket,相較HTTP連線每當一次的Reqset重建連線若當數量很高的狀態下就會有相當的影響。
拉回來~在gRPC狀況下在K8S上會遇到HPA,也就是說當服務再多個運行的Backend上會遇到一個問題,就是gRPC做LoadBalance時會咬著一開始建立的連線進而無法達到我們想要的LoadBalance如此一來這就是為什麼要使用Istio,由於它的Istio Proxy(Sidecar)可解決此問題,這邊就不贅述Istio Proxy了,有興趣的可以翻翻先前幾天Istio Control Plane內容。
如圖:
圖片來源:https://weeraman.com/building-a-service-mesh-with-istio-be5ccce1bf98
當然要使用Istio的理由還是有像是,安全性較高以及路由可控至流量
等優勢,但主要需求還是他可以解決掉gRPC尚無法去做LoadBalance的不足。